/*
 * 描          述:  <描述>
 * 修  改   人:  Administrator
 * 修改时间:  2019年4月30日
 * <修改描述:>
 */
package com.tx.component.configuration.starter;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.support.TransactionTemplate;

import com.tx.component.configuration.dao.ConfigPropertyItemDao;
import com.tx.component.configuration.dao.impl.ConfigPropertyItemDaoImpl;
import com.tx.component.configuration.service.ConfigPropertyItemService;
import com.tx.component.configuration.service.impl.ConfigPropertyItemServiceImpl;
import com.tx.core.mybatis.support.MyBatisDaoSupport;

/**
 * 基础数据持久层配置逻辑<br/>
 * <功能详细描述>
 *
 * @author Administrator
 * @version [版本号, 2019年4月30日]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
@Configuration
public class ConfigPersisterConfiguration {

	/** <默认构造函数> */
	public ConfigPersisterConfiguration() {
		super();
	}

	/**
	 * mybatis持久层逻辑实现<br/>
	 * <功能详细描述>
	 *
	 * @author Administrator
	 * @version [版本号, 2019年5月2日]
	 * @see [相关类/方法]
	 * @since [产品/模块版本]
	 */
	@Configuration
	public static class MybatisConfigContextPersisterConfiguration implements InitializingBean {

		/** 事务管理器 */
		@SuppressWarnings("unused")
		private TransactionTemplate transactionTemplate;

		/** <默认构造函数> */
		public MybatisConfigContextPersisterConfiguration(PlatformTransactionManager transactionManager) {
			this.transactionTemplate = new TransactionTemplate(transactionManager);
		}

		/**
		 * @throws Exception
		 */
		@Override
		public void afterPropertiesSet() throws Exception {
		}

		/**
		 * 数据字典实例<br/>
		 * <功能详细描述>
		 *
		 * @return
		 * @return DataDictDao [返回类型说明]
		 * @throws Exception [参数说明]
		 * @throws throws    [异常类型] [异常说明]
		 * @see [类、类#方法、类#成员]
		 */
		@Bean("config.configPropertyItemDao")
		@ConditionalOnMissingBean(name = "config.configPropertyItemDao")
		public ConfigPropertyItemDao configPropertyItemDao() throws Exception {
			ConfigPropertyItemDao dao = new ConfigPropertyItemDaoImpl();
			return dao;
		}

		/**
		 * 数据字典实例<br/>
		 * <功能详细描述>
		 *
		 * @return
		 * @return DataDictDao [返回类型说明]
		 * @throws Exception [参数说明]
		 * @throws throws    [异常类型] [异常说明]
		 * @see [类、类#方法、类#成员]
		 */
		@Bean("config.configPropertyItemService")
		@ConditionalOnMissingBean(name = "config.configPropertyItemService")
		public ConfigPropertyItemService configPropertyItemService(ConfigPropertyItemDao configPropertyItemDao)
				throws Exception {
			ConfigPropertyItemService service = new ConfigPropertyItemServiceImpl(configPropertyItemDao);
			return service;
		}
	}
}
